The invention is directed to an improved approach for implementing a graphical user interface.
A graphical user interface (GUI) is a type of interface that uses graphical image elements to allow users to interact with and control a computing or electronic device. Instead of requiring a user to type commands using some form of text, the GUI control and navigation of the interface based upon direct manipulation of graphical elements.
There are many types of computing applications that utilize graphical user interfaces to enable users to visually edit and modify the configuration of objects on a screen. For example, many types of drawing and computer aided design (CAD) tools are implemented using GUI-style interfaces. The GUI interface permits the user to visually manipulate the configuration of objects that are being drawn and displayed on the screen of a display device. In many of these GUIs, the user will select an object and can manipulate or edit the object using a pointing device such as a mouse pointer. For operations that involve moving an object, the GUI allows the user to manipulate an object by dragging and dropping the object from a first location to a second location. Dragging, or ghosting as it's sometimes called, is commonplace in modern graphical editors and is accomplished by having the user select the object(s) they intend to move and initiates some sort of “move” command where the selected objects appear to be attached or glued to the pointer as it moves across the screen.
When presenting images of objects using a GUI, it is very helpful to the user if the visual representation displayed to the user is a close approximation of the end result of the user's actions. This correspondence between the visual representation and the actual end result is often referred to as “WYSIWYG” (What You See Is What You Get), and is a desirable aspect of many GUI-based systems. This correspondence is important to provide visual feedback to the user regarding where the objects will end up once the move operation is completed. In addition, the GUI should provide visual continuity to the user during the ghosting of the objects as the user moves the pointer across the screen. This aspect of the GUI lowers the cognitive load on the user, since the user does not have to figure out where the object will end up and increases the user's confidence in the tool.
However, problems may occur if the user commits an error or creates some sort of configuration violation when manipulating an object using the GUI. For example, in some applications, overlapping objects are not permitted and it is a violation if the user attempts to move one object into the space already being occupied by another object. The user would be allowed to select, drag, and drop the objects as long as the end result does not violate the above mentioned restriction.
When moving an object, it is desirable to let the user to see where the objects would end up on the screen if the user completes the move operation, but the intended move operation by the user may cause the object to be moved to an impermissible/unacceptable location on the screen. It is desirable to let the user see, at all times, where the objects would end up on the screen if the user completes the move operation, but the problem is that the user may have moved the object to an impermissible location. Conventional GUI implementations fail to provide acceptable approach for resolving this problem.
Therefore, there is a need for an improved approach to implementing a GUI that an account for illegal operations by the user. The improved approach should provide a visual representation that corresponds to the expected end result, but should also be useful to track the user's actions even if there is a violation.